'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.06
 * lastUpdateDate：2018.02.06
 * description：类型化数组的subarray / set的用法
 */
/**
 * 先创建两个类型化数组，它们共用同一块内存空间，只是
 * 观察的视图范围不同而已，可以通过console.log(buf.buffer === buf2.buffer);
 * 看看如果是true表示用的是同一块内存空间，反之不是
 */
let buf = new Int8Array([1, 2, 3, 4, 5, 6, 7, 8]);

// result：8 8 Int8Array [ 1, 2, 3, 4, 5, 6, 7, 8 ]
console.log(buf.length, buf.byteLength, buf);

let buf2 = new Int16Array(12);

/**
 * 这种set的方式只是把buf的值[1, 2, 3, 4, 5, 6, 7, 8]拷贝了过来，
 * 并没有把内存空间拷贝过来，使用的不是同一块内存空间。这里值得注意的
 * 是buf类型化数组的长度如果比buf2要大的话，那么会抛出Source is too large
 * 的错误，buf类型化数组的长度甚至可以比buf2小，这时候就没有问题，挺好！
 * 这里还可以指定区间范围，比如buf2.set(buf, start);，其余的补0就行了，
 * 如下所示：
 */
buf2.set(buf, 3);

// result：12 24 Int16Array [ 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0 ]
console.log(buf2.length, buf2.byteLength, buf2);

// fasle表示创建的两个类型化数组使用的不是同一块内存空间
console.log(buf.buffer === buf2.buffer);
